perm filename OPDECL.SAI[PNT,HE]15 blob sn#572768 filedate 1981-03-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002					REdefine
C00020 ENDMK
C⊗;
				REdefine
preload_array(name, defs, type, first, len)"[][]"=[
	preload_with defs null; type array name[first:first+len] ];

				REdefine

indices(name, postfix)"[][]"=[
    redefine xxcount=1;
    redefine xx(xxarg)=[
	redefine xxtemp= [ define xxarg]&[postfix=xxcount];
	xxtemp;
	redefine xxcount=xxcount+1;];
    name ];

	define op_list "[][]"=[
ZZC("≡",		eqv,		EXP_XX,		[F3←1-(B1 XOR B2)])
  XXX(XEQV,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("EQV",	eeqv,		EXP_XX,		[F3←1-(B1 XOR B2)])
  XXX(XEQV,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("∨",		or,		BEFACT_XX,	[F3←B1 LOR B2])
  XXX(XLOR,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("OR",	oor,		BEFACT_XX,	[F3←B1 LOR B2])
  XXX(XLOR,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("⊗",		xor,		BEFACT_XX,	[F3←B1 XOR B2])
  XXX(XXOR,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("XOR",	xxor,		BEFACT_XX,	[F3←B1 XOR B2])
  XXX(XXOR,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("∧",		and,		BFACT_XX,	[F3←B1 LAND B2])
  XXX(XAND,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("AND",	aand,		BFACT_XX,	[F3←B1 LAND B2])
  XXX(XAND,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("=",		seq,		BTERM_XX,	[F3← -(F1=F2)])
  XXX(XSEQ,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("≠",		sne,		BTERM_XX,	[F3← -(F1≠F2)])
  XXX(XSNE,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC(">",		sgt,		BTERM_XX,	[F3← -(F1>F2)])
  XXX(XSGT,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("<",		slt,		BTERM_XX,	[F3← -(F1<F2)])
  XXX(XSLT,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("≥",		sge,		BTERM_XX,	[F3← -(F1≥F2)])
  XXX(XSGE,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("≤",		sle,		BTERM_XX,	[F3← -(F1≤F2)])
  XXX(XSLE,0,	#SC,120,#SC,	#SC,	0,	NIL_D,ANY_D,SAME1_D,NIL_D)
ZZC("+",		Plus,		AEXP_XX,	[F3← F1 + F2])
  XXX(XNOOP,0,	#SC,100,#SC,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XSADD,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XNOOP,0,	#VT,100,#VT,	0,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XVADD,0,	#VT,120,#VT,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVADD,0,	#TR,120,#VT,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVADD,0,	#FRE,120,#VT,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVADD,0,	#TR,120,#TR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVADD,0,	#FRE,120,#FR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZ("#",		pplus,		AEXP_XX,	[])
  XXX(XTVREL,0,	#TR,120,#VT,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVREL,0,	#FRE,120,#VT,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVREL,0,	#TR,120,#TR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVREL,0,	#FRE,120,#FR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("-",		minus,		AEXP_XX,	[F3← F1 - F2])
  XXX(XSNEG,0,	#SC,100,#SC,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XSSUB,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XVNEG,0,	#VT,100,#VT,	0,	0,	SAME12_D,ANY_D,NIL_D,NIL_D)
  XXX(XVSUB,0,	#VT,120,#VT,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVSUB,0,	#TR,120,#TR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVSUB,0,	#FRE,120,#FR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZ(".",		vdot,		TERM_XX,	[])
  XXX(XVDOT,0,	#SC,120,#VT,	#VT,	0,	MULT_D,ANY_D,ANY_D,NIL_D)
ZZC("*",		times,		TERM_XX,	[F3← F1 * F2])
  XXX(XSMUL,0,	#SC,120,#SC,	#SC,	0,	MULT_D,ANY_D,ANY_D,NIL_D)
  XXX(XSVMUL,0,	#VT,120,#SC,	#VT,	0,	MULT_D,ANY_D,ANY_D,NIL_D)
  XXX(XVSMUL,0,	#VT,210,#VT,	#SC,	0,	MULT_D,ANY_D,ANY_D,NIL_D)
  XXX(XVCROSS,0,#VT,120,#VT,	#VT,	0,	MULT_D,ANY_D,ANY_D,NIL_D)
  XXX(XTVMUL,0,	#VT,120,#RT,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#RT,120,#RT,	#RT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTVMUL,0,	#VT,120,#TR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#TR,120,#TR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#FRE,120,#TR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#FRE,120,#FR,	#VT,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#FRE,120,#FR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XTTMUL,0,	#FRE,120,#FR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("/",		sdiv,		TERM_XX,	[F3← F1 / F2])
  XXX(XSDIV,0,	#SC,120,#SC,	#SC,	0,	DIVID_D,ANY_D,ANY_D,NIL_D)
  XXX(XVSDIV,0,	#VT,120,#VT,	#SC,	0,	DIVID_D,ANY_D,ANY_D,NIL_D)
ZZC("MAX",	max,		TERM_XX,	[F3← F1 MAX F2])
  XXX(XMAX,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("MIN",	min,		TERM_XX,	[F3← F1 MIN F2])
  XXX(XMIN,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("DIV",	div,		TERM_XX,	[F3← I1 DIV I2])
  XXX(XIDIV,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("MOD",	mod,		TERM_XX,	[F3← I1 MOD I2])
  XXX(XMOD,0,	#SC,120,#SC,	#SC,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZ("REL",	rel,		WRTREL_XX,	[])
  XXX(XVFREL,0,	#VT,210,#VT,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XVFREL,0,	#VT,210,#VT,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFFREL,0,	#TR,210,#TR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFFREL,0,	#TR,210,#TR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFFREL,0,	#TR,210,#FR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFFREL,0,	#TR,210,#FR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZ("WRT",	wrt,		WRTREL_XX,	[])
  XXX(XWRT,0,	#VT,210,#VT,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XWRT,0,	#VT,210,#VT,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZ("→",		frontarrow,	FACTOR_XX,	[])
  XXX(XFTOF,0,	#TR,120,#TR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFTOF,0,	#TR,120,#TR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFTOF,0,	#TR,120,#FR,	#TR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
  XXX(XFTOF,0,	#TR,120,#FR,	#FR,	0,	SAME12_D,ANY_D,SAME1_D,NIL_D)
ZZC("↑",		stos,		FACTOR_XX,	[F3←F1↑F2])
  XXX(XSEXP,0,	#SC, 120,#SC,	#SC,	0,	NIL_D,ANY_D,NIL_D,NIL_D)
	! following two actually pf_XX;
  XXX(XUPARROW,0,	#FRE,100,#TR,	0,	0,SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XUPARROW,0,	#FRE,100,#FR,	0,	0,SAME1_D,ANY_D,NIL_D,NIL_D)
ZZC("¬",		not,		PF_XX,		[F3←1-B2])
  XXX(XNOT,0,	#SC,100,#SC,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("ORIENT",	orient,		PF_XX,		[])
  XXX(XTORIEN,0,	#RT,100,#TR,	0,	0,	NIL_D,ANY_D,NIL_D,NIL_D)
  XXX(XTORIEN,0,	#RT,100,#FR,	0,	0,	NIL_D,ANY_D,NIL_D,NIL_D)
ZZ("UNIT",	uvect,		PF_XX,		[])
  XXX(XUNITV,0,	#VT,100,#VT,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("AXIS",	axis,		PF_XX,		[])
  XXX(XTAXIS,0,	#VT,100,#RT,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)
ZZ("POS",	pos,		PF_XX,		[])
  XXX(XTPOS,0,	#VT,100,#TR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XTPOS,0,	#VT,100,#FR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("INV",	rinv,		PF_XX,		[])
  XXX(XTINVRT,0,	#RT,100,#RT,	0,	0,	NIL_D,NIL_D,NIL_D,NIL_D)
  XXX(XTINVRT,0,	#TR,100,#TR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XTINVRT,0,	#TR,100,#FR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
ZZC("INT",	int,		PF_XX,		[F3←I2])
  XXX(XINT,0,	#SC,100,#SC,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZC("CONSTRUCT",	construct,	PF_XX,		[])
  XXX(XCONSTR,0,	#TR,123,#VT,	#VT,	#VT,	SAME123_D,ANY_D,SAME1_D,SAME1_D)
  XXX(XFCONSTR,0,	#TR,123,#FR,	#FR,	#FR,	SAME123_D,ANY_D,SAME1_D,SAME1_D)
ZZC("SQRT",	sqrt,		PF_XX,		[F3←SQRT(F2)])
  XXX(XSSBRTN,1,#SC,100,#SC,	0,	0,		SQRT_D,ANY_D,NIL_D,NIL_D)
ZZC("SIN",	sin,		PF_XX,		[F3←SIND(F2)])
  XXX(XSSBRTN,2,#SC,100,#SC,	0,	0,		NIL_D,ANGL_D,NIL_D,NIL_D)
ZZC("COS",	cos,		PF_XX,		[F3←COSD(F2)])
  XXX(XSSBRTN,3,#SC,100,#SC,	0,	0,		NIL_D,ANGL_D,NIL_D,NIL_D)
ZZC("TAN",	tan,		PF_XX,		[F3←SIND(F2)/COSD(F2)])
  XXX(XSSBRTN,4,#SC,100,#SC,	0,	0,		NIL_D,ANGL_D,NIL_D,NIL_D)
ZZC("ASIN",	asin,		PF_XX,		[F3←(180.0/π)*ASIN(F2)])
  XXX(XSSBRTN,5,#SC,100,#SC,	0,	0,		ANGL_D,NIL_D,NIL_D,NIL_D)
ZZC("ACOS",	acos,		PF_XX,		[F3←(180.0/π)*ACOS(F2)])
  XXX(XSSBRTN,6,#SC,100,#SC,	0,	0,		ANGL_D,NIL_D,NIL_D,NIL_D)
ZZC("ATAN2",	atan2,		PF_XX,		[F3←(180.0/π)*ATAN2(F1,F2)])
  XXX(XATAN2,0,	#SC,120,#SC,	#SC,	0,		ANGL_D,ANY_D,SAME1_D,NIL_D)
ZZC("LOG",	log,		PF_XX,		[F3←LOG(F2)])
  XXX(XSSBRTN,8,#SC,100,#SC,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)
ZZC("EXP",	exp,		PF_XX,		[F3←EXP(F2)])
  XXX(XSSBRTN,9,#SC,100,#SC,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)
ZZ("RUNTIME",	runtime,	PF_XX,		[])
  XXX(XSSBRTN,10,#SC,100,#SC,	0,	0,		TIME_D,ANY_D,NIL_D,NIL_D)
ZZ("ADC",	adc,		PF_XX,		[])
  XXX(XADC,-1,	#SC,100,#SC,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)

ZZC("|",		MAGNITUDE,	PF_XX,		[F3←ABS(F2)])
  XXX(XSABS,0,	#SC,100,#SC,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XVMAGN,0,	#SC,100,#VT,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XTMAGN,0,	#SC,100,#RT,	0,	0,		ANGL_D,NIL_D,NIL_D,NIL_D)
ZZ(["("],	LPAREN,		PF_XX,		[])
ZZ(["( , , )"],	IMPLICIT,	PF_XX,		[])
  XXX(XVMAKE,0,	#VT,123,#SC,	#SC,	#SC,		SAME123_D,ANY_D,SAME1_D,SAME1_D)
  XXX(XVSAXWR,0,	#RT,120,#VT,	#SC,	0,	NIL_D,ANY_D,ANGL_D,NIL_D)
  XXX(XTMAKE,0,	#TR,120,#RT,	#VT,	0,		SAME2_D,ANY_D,ANY_D,NIL_D)
ZZ("↓",		DOWNARROW,	PF_XX,		[])
  XXX(XDWNARROW,0,	#FRE,100,#TR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XDWNARROW,0,	#FRE,100,#FR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("$",		DOLLAR,		PF_XX,		[])
  XXX(XDOLLAR,0,	#FRE,100,#TR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XDOLLAR,0,	#FRE,100,#FR,	0,	0,	SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("α",		ALPHA,		PF_XX,		[])
  XXX(XALPHA,0,	#FRE,100,#TR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XALPHA,0,	#FRE,100,#FR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("FRAME",	FRAME,		PF_XX,		[])
  XXX(XTMAKE,0,	#FR,120,#RT,	#VT,	0,		SAME2_D,NIL_D,ANY_D,NIL_D)
ZZ("VECTOR",	VECTOR,		PF_XX,		[])
  XXX(XVMAKE,0,	#VT,123,#SC,	#SC,	#SC,		SAME123_D,ANY_D,SAME1_D,SAME1_D)
ZZ("TRANS",	TRANS,		PF_XX,		[])
  XXX(XTMAKE,0,	#TR,120,#RT,	#VT,	0,		SAME2_D,ANY_D,ANY_D,NIL_D)
ZZ("ROT",	ROT,		PF_XX,		[])
  XXX(XVSAXWR,0,	#RT,120,#VT,	#SC,	0,	NIL_D,ANY_D,ANGL_D,NIL_D)
ZZ("XCOORD",	coordx,		PF_XX,		[])
  XXX(XGTCMP,1,	#SC,100,#VT,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,1,	#SC,100,#TR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,1,	#SC,100,#FR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("YCOORD",	coordy,		PF_XX,		[])
  XXX(XGTCMP,2,	#SC,100,#VT,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,2,	#SC,100,#TR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,2,	#SC,100,#FR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("ZCOORD",	coordz,		PF_XX,		[])
  XXX(XGTCMP,3,	#SC,100,#VT,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,3,	#SC,100,#TR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
  XXX(XGTCMP,3,	#SC,100,#FR,	0,	0,		SAME1_D,ANY_D,NIL_D,NIL_D)
ZZ("INSCALAR",	inscalar,	PF_XX,		[])
  XXX(XSCALRD,0,	#SC,000,0,	0,	0,	NIL_D,NIL_D,NIL_D,NIL_D)
ZZ("QUERY",	qquery,		PF_XX,		[])
  XXX(XQUERY,0,	#SC,000,0,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)
ZZ("VM",	vm,		PF_XX,		[])
  XXX(XVM,0,	#SC,000,0,	0,	0,		NIL_D,NIL_D,NIL_D,NIL_D)
];

REQUIRE "[][]" DELIMITERS;
REDEFINE ZZ(ARG0,ARG1,ARG2)=[XX(ARG1)];
REDEFINE ZZC(ARG0,ARG1,ARG2)=[XX(ARG1)];
REDEFINE XXX(ARGNAME,ARGNDX,ARGTYPE,ARGORDER,ARG1,ARG2,ARG3,DIMR,DIM1,DIM2,DIM3)=[];

indices(op_list,_X) ;


DEFINE EXP_XX=1,BEFACT_XX=2,BFACT_XX=3,BTERM_XX=4,AEXP_XX=5,WRTREL_XX=6,
	TERM_XX=7,FACTOR_XX=8, PF_XX=9;

DEFINE	SAME1_D=1,SAME2_D=2,SAME3_D=3,MULT_D=4,DIVID_D=5,ANGL_D=6,
	NIL_D=7,ANY_D=8,SAME_D=9,DIST_D=10,SQRT_D=11,TIME_D=12,NOCH_D=13,
	SAME12_D=14,SAME123_D=15;

DEFINE #PNTINTOPS=XXCOUNT-1;
DEFINE #OPERATORS=#PNTINTOPS;